package br.com.pentagrama.dto;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import br.com.pentagrama.exception.ParseConfException;

public class InfoServico {

	private String nome;
	
	private boolean udpStatus;
	
	private boolean tcpStatus;
	
	private boolean ipStatus; 
	
	private Set<String> udpAcesso = new HashSet<String>();
	
	private Set<String> tcpAcesso = new HashSet<String>();
	
	public List<String> getAcessosIndividuais(String acesso) throws ParseConfException {
		List<String> retorno = new ArrayList<String>();
		
		try {
			int indexDoisPontos = acesso.indexOf(":");
			if(indexDoisPontos < 0) {
				throw new ParseConfException("Dois pontos nao encontrado.");
			}
			String ip = acesso.substring(0, indexDoisPontos + 1);
			int indexJogoVelha = acesso.indexOf("#");
			if(indexJogoVelha >=0 ) {
				String portaInicialT = acesso.substring(indexDoisPontos+1,indexJogoVelha);
				String portaFinalT = acesso.substring(indexJogoVelha+1);
				
				int portaInicial = Integer.parseInt(portaInicialT);
				int portaFinal = Integer.parseInt(portaFinalT);
				
				for(int i = portaInicial; i <= portaFinal; i++) {
					retorno.add(ip + i);
				}
				
			} else {
				String porta = acesso.substring(indexDoisPontos + 1);
				Integer.parseInt(porta);
				retorno.add(acesso);
			}
		} catch (Exception e) {
			throw new ParseConfException("Parametro invalido: " + acesso, e);
		}
		return retorno;
	}

	/**
	 * Método "get" para o atributo nome.
	 *
	 * @return Atributo nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * Método "set" para o atibuto nome.
	 *
	 * @param nome utilizado para atualizar o atributo: nome
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}


	/**
	 * Método "get" para o atributo udpStatus.
	 *
	 * @return Atributo udpStatus
	 */
	public boolean isUdpStatus() {
		return udpStatus;
	}

	/**
	 * Método "set" para o atibuto udpStatus.
	 *
	 * @param udpStatus utilizado para atualizar o atributo: udpStatus
	 */
	public void setUdpStatus(boolean udpStatus) {
		this.udpStatus = udpStatus;
	}

	/**
	 * Método "get" para o atributo tcpStatus.
	 *
	 * @return Atributo tcpStatus
	 */
	public boolean isTcpStatus() {
		return tcpStatus;
	}

	/**
	 * Método "set" para o atibuto tcpStatus.
	 *
	 * @param tcpStatus utilizado para atualizar o atributo: tcpStatus
	 */
	public void setTcpStatus(boolean tcpStatus) {
		this.tcpStatus = tcpStatus;
	}

	/**
	 * Método "get" para o atributo ipStatus.
	 *
	 * @return Atributo ipStatus
	 */
	public boolean isIpStatus() {
		return ipStatus;
	}

	/**
	 * Método "set" para o atibuto ipStatus.
	 *
	 * @param ipStatus utilizado para atualizar o atributo: ipStatus
	 */
	public void setIpStatus(boolean ipStatus) {
		this.ipStatus = ipStatus;
	}

	/**
	 * Método "get" para o atributo udpAcesso.
	 *
	 * @return Atributo udpAcesso
	 */
	public Set<String> getUdpAcesso() {
		return udpAcesso;
	}

	/**
	 * Método "set" para o atibuto udpAcesso.
	 *
	 * @param udpAcesso utilizado para atualizar o atributo: udpAcesso
	 */
	public void setUdpAcesso(Set<String> udpAcesso) {
		this.udpAcesso = udpAcesso;
	}

	/**
	 * Método "get" para o atributo tcpAcesso.
	 *
	 * @return Atributo tcpAcesso
	 */
	public Set<String> getTcpAcesso() {
		return tcpAcesso;
	}

	/**
	 * Método "set" para o atibuto tcpAcesso.
	 *
	 * @param tcpAcesso utilizado para atualizar o atributo: tcpAcesso
	 */
	public void setTcpAcesso(Set<String> tcpAcesso) {
		this.tcpAcesso = tcpAcesso;
	}
	
	
}
